//
//  HMHomeTableViewController.swift
//  Weibo22
//
//  Created by Apple on 16/11/30.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit
import YYModel

//  重用标记
private let HMHomeTableViewCellIdentifier = "HMHomeTableViewCellIdentifier"

class HMHomeTableViewController: HMVisitorTableViewController {
    
    
    //  对应的视图模型(ViewModel)
    fileprivate lazy var homeStatusViewModel = HMHomeStatusViewModel()
    
    //  MARK: -- 懒加载控件
    fileprivate lazy var pullUpView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        indicatorView.color = UIColor.red
        
        return indicatorView
    }()
    
//    //  MARK: -- 系统下拉刷新的控件
//    fileprivate lazy var pullDownView: UIRefreshControl = {
//        let ctr = UIRefreshControl()
//        //  添加一个事件
//        ctr.addTarget(self, action: #selector(pullDownRefresh), for: .valueChanged)
//        return ctr
//    }()
    
    //  MARK: -- 自定义下拉刷新的控件
    fileprivate lazy var pullDownView: HMRefreshControl = {
        let ctr = HMRefreshControl()
        //  添加一个事件
        ctr.addTarget(self, action: #selector(pullDownRefresh), for: .valueChanged)

        return ctr
    }()
    
    // tipLabel
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 12, textColor: UIColor.white)
        label.backgroundColor = UIColor.orange
        label.text = "没有加载到最新的微博数据"
        label.textAlignment = .center
        //  默认隐藏
        label.isHidden = true
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if isLogin == false {
            //  修改访客视图信息
            visitorView?.updateVisitorInfo(imageName: nil, message: nil)
        } else {
            setupUI()
            //  表示登陆
            loadData()
        }
        
    }
    
    //  设置视图
    private func setupUI() {
    
        if let nav = self.navigationController {
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            //  nav.navigationBar.frame.maxY 获取导航栏的最大y走CGRectGetxxMaxY
            tipLabel.frame = CGRect(x: 0, y: nav.navigationBar.frame.maxY - 35, width: ScreenWidth, height: 35)
        }
        setupTableView()
        
    
    }
    //  开启tip动画
    func startAnimation(message: String) {
        
        if tipLabel.isHidden == false {
            //  正在执行动画
            return
        }
        
        
        tipLabel.text = message
        //  开启动画让其显示
        tipLabel.isHidden = false
        
        UIView.animate(withDuration: 1, animations: {
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: self.tipLabel.height)
        
        }, completion: { (_)->Void in
            
            UIView.animate(withDuration: 1, animations: { 
                self.tipLabel.transform = CGAffineTransform.identity
            }, completion: { (_) in
                //  动画执行完成以后让其隐藏
                self.tipLabel.isHidden = true
            })
        
        })
        
        
        
    }
    
    
    
    
    private func setupTableView() {
        
        //  注册cell
        tableView.register(HMStatusTableViewCell.self, forCellReuseIdentifier: HMHomeTableViewCellIdentifier)
        
        //  去掉分割线
        tableView.separatorStyle = .none
    
        //  设置高度
        tableView.rowHeight = UITableViewAutomaticDimension
        //  预估高度越近真实高度越好
        tableView.estimatedRowHeight = 200
        
        tableView.tableFooterView = pullUpView
        
        //  方式1
//        self.refreshControl = pullDownView
        //  方式2
//        tableView.addSubview(pullDownView)
        
        //  使用自定义下拉刷新
        tableView.addSubview(pullDownView)
        
    }
    
    //  下拉属性
    @objc private func pullDownRefresh() {
        
        print("下拉刷新")
        loadData()
        
//        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2, execute: {
//            //  结束刷新
//            self.pullDownView.endRefreshing()
//            
//        })
        
        
    }
    
    
    //  结束刷新
    func endRefreshing() {
        pullUpView.stopAnimating()
        pullDownView.endRefreshing()
    }
    
    //  加载微博数据
    fileprivate func loadData() {
        //  使用ViewModel去加载数据
        homeStatusViewModel.loadData(isup: pullUpView.isAnimating) { (isSuccess, message) in
            //  如果不是上拉加载,那么让其执行tip动画
            if self.pullUpView.isAnimating == false {
                //  加载完成
                self.startAnimation(message: message)
            }
            
            //  结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
        //  代码已经抽取到HMHomeStatusViewModel
//        HMNetworkTools.sharedTools.requestStatus { (response, error) in
//            if error != nil {
//                print(error!)
//                return
//            }
//            //  代码执行到此表示数据请求成功
//            let dic = response as! [String: Any]
//            let statusDicArray = dic["statuses"] as! [[String: Any]]
//            
////            var tempArray = [HMStatus]()
////            for statusDic in statusDicArray {
////                //  字典转模型
////                let status = HMStatus(dic: statusDic)
////                tempArray.append(status)
////            }
//            //  使用YYModel完成数组字典转成数组模型
//            let modelArray = NSArray.yy_modelArray(with: HMStatus.self, json: statusDicArray) as! [HMStatus]
//            
//            
//            //  数据准备好了
//            self.statusList = modelArray
//            
//            self.tableView.reloadData()            
//            
//        }
    
    }
    
    
    

}

//  MARK: -- UITableViewDataSource
extension HMHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return homeStatusViewModel.statusList.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: HMHomeTableViewCellIdentifier, for: indexPath) as! HMStatusTableViewCell
        //  设置选中颜色
        cell.selectionStyle = .none
        //  绑定数据 -> ViewModel
        
        let viewModel = homeStatusViewModel.statusList[indexPath.row]
        //  绑定viewModel数据
        cell.statusViewModel = viewModel
        
        return cell
    }
    
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        if indexPath.row == homeStatusViewModel.statusList.count - 1 && !pullUpView.isAnimating {
            print("已经滚动到最后一个cell了")
            pullUpView.startAnimating()
            
            //  加载更多数据可以了
            loadData()
        }
        
        
    }
    
    
    
}






